package com.kun.base.web.websocket;

import com.kun.base.model.User;
import com.kun.base.web.activemq.ProducerService;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;

import javax.jms.Destination;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;

/**
 * Created by admin on 2017/8/9.
 * websocket消息处理类
 */
public class WSMessageHandler {

    /**
     * websocket客户端连接到服务器时调用
     * @param session websocket的会话
     * @param users 连接到本机的websocket的所有会话(在集群下在线的客户端可能不在同一服务器上,尽量不要自己移除里面的成员)
     * @param httpSession 连接到服务器的httpsession,为了使用web服务器数据(可能为空,比如websocket不是通过网页发起的链接)
     * @param user web服务器当前登录的用户(可能为空,比如websocket不是通过网页发起的链接和用户没有登录的)
     * @param producerService 消息列队生产者,可以向消息列队发送消息
     * @param queueDestination 系统默认的消息列队
     */
    public void connectionOpen(WebSocketSession session, ArrayList<WebSocketSession> users, HttpSession httpSession, User user, ProducerService producerService, Destination queueDestination) {
    }

    /**
     * websocket客户端发送消息到服务器时调用
     * @param session websocket的会话
     * @param users 连接到本机的websocket的所有会话(在集群下在线的客户端可能不在同一服务器上,尽量不要自己移除里面的成员)
     * @param httpSession 连接到服务器的httpsession,为了使用web服务器数据(可能为空,比如websocket不是通过网页发起的链接)
     * @param user web服务器当前登录的用户(可能为空,比如websocket不是通过网页发起的链接和用户没有登录的)
     * @param producerService 消息列队生产者,可以向消息列队发送消息
     * @param queueDestination 系统默认的消息列队
     * @param message 消息内容对象
     */
    public void handleMessage(WebSocketSession session, ArrayList<WebSocketSession> users, HttpSession httpSession, User user, ProducerService producerService, Destination queueDestination, WebSocketMessage<?> message) {
        producerService.sendMessage(queueDestination,message.getPayload().toString());
    }

    /**
     * websocket客户端与服务器的连接发生异常时调用
     * @param session websocket的会话
     * @param users 连接到本机的websocket的所有会话(在集群下在线的客户端可能不在同一服务器上,尽量不要自己移除里面的成员)
     * @param httpSession 连接到服务器的httpsession,为了使用web服务器数据(可能为空,比如websocket不是通过网页发起的链接)
     * @param user web服务器当前登录的用户(可能为空,比如websocket不是通过网页发起的链接和用户没有登录的)
     * @param producerService 消息列队生产者,可以向消息列队发送消息
     * @param queueDestination 系统默认的消息列队
     * @param exception 异常对象
     */
    public void handleTransportError(WebSocketSession session, ArrayList<WebSocketSession> users, HttpSession httpSession, User user, ProducerService producerService, Destination queueDestination, Throwable exception) {
    }

    /**
     * websocket客户端与服务器的连接发生异常时调用
     * @param session websocket的会话
     * @param users 连接到本机的websocket的所有会话(在集群下在线的客户端可能不在同一服务器上,尽量不要自己移除里面的成员)
     * @param httpSession 连接到服务器的httpsession,为了使用web服务器数据(可能为空,比如websocket不是通过网页发起的链接)
     * @param user web服务器当前登录的用户(可能为空,比如websocket不是通过网页发起的链接和用户没有登录的)
     * @param producerService 消息列队生产者,可以向消息列队发送消息
     * @param queueDestination 系统默认的消息列队
     * @param closeStatus 关闭状态对象
     */
    public void connectionClosed(WebSocketSession session, ArrayList<WebSocketSession> users, HttpSession httpSession, User user, ProducerService producerService, Destination queueDestination, CloseStatus closeStatus) {
    }
}
